Modbus Rtu Slave操作手册


概述

Modbus 本身是一种信息交换的规范,Modbus RTU则是透过串口来实现Modbus 的一种方式,因此所有的信息都是通过串口来传输的;Modbus协议属于 C/S 架构,Modbus Rtu Slave是一种Server用来存放所有要被读取的工业设备数据;

使用场景

整体架构

产品组件 描述说明
modbusslave_0.0.5_amd64.deb Modbus rtu slave RTE组件
modbusslave.library 上位机程序使用的库文件

安装卸载

安装要求

安装过程

工智机端安装Modbus Tcp Slave RTE组件

cd $HOME
sudo dpkg -i modbusslave_0.0.5_amd64.deb

sudo nano /usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg
ComponentManager]
 Component.0=retainDeamon
 Component.1=CmpCanBusUtils
 Component.2=CmpSinsegyeLibs
 Component.3=SinsegyeCmp
 Component.4=modbusslave
sudo systemctl restart sinsegyerte.service

Metafacture安装library

更新安装 工智机端升级Modbus Tcp Slave RTE组件

cd $HOME
sudo dpkg -i modbusslave_0.0.5_amd64.deb
sudo systemctl restart sinsegyerte.service

Metafacture升级library

卸载过程

工智机端卸载Modbus Tcp Slave RTE组件

sudo dpkg -r modbusslave
sudo nano /usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg
sudo systemctl restart sinsegyerte.service

卸载MetaFacture侧的Modbus Tcp slave library


技术说明

快速启动

本例软、硬件配置

硬件:

  1. SX5100工智机 MetaOS V24.08.15_SX5

  2. Win10 PC

软件:

  1. MetaFacutre V1.0.6.3

  2. Modbus Poll主站工具

本例实验要求及原理

实验原理

本例实验操作步骤

新建Modbus tcp slave工程的实验步骤如下:

PROGRAM rtu_slave
VAR
        FB_Modbus_Com_Slave_0      : ModbusSlave.FB_Modbus_Com_Slave;
        bxEnable                   : BOOL:=TRUE;
        pbyCoilA                   : ARRAY [0..2048] OF BOOL;
        pbyDiscreteInputA          : ARRAY [0..2048] OF BOOL;
        pbyInputRegisterA          : ARRAY [0..2048] OF WORD;
        pbyHoldingRegisterA        : ARRAY [0..2048] OF word;
        bBusy                      : BOOL;
        bActive                    : BOOL;
        bError                     : BOOL;
        eError                     : BOOL;
        ulRecvCounter              : UDINT;
        ulSendCounter              : UDINT;  
END_VAR
FB_Modbus_Com_Slave_0(
        bEnable               :=bxEnable ,
        uiSlaveId             :=1 ,
        comPort               :=ModbusSlave.COM_PORT.ttys6 ,   //SX5  ttys6、 SX58 ttyS0、SX2 ttyS0;
        baudrate              :=ModbusSlave.SERIAL_BAUDRATE.baudrate_115200 ,
        byteSize              :=ModbusSlave.SERIAL_DATABIT.databit_8 ,
        parity                :=ModbusSlave.SERIAL_PARITY.parity_no ,   //主站也要同步设置成这样
        stopBits              :=ModbusSlave.SERIAL_STOPBIT.stopbit_1 ,
        udiTimeOut            :=10000 ,
        psMbTest              := ,
        pbyCoil               :=ADR(pbyCoilA),
        pbyDiscreteInput      :=ADR(pbyDiscreteInputA),
        pbyInputRegister      :=ADR(pbyInputRegisterA),
        pbyHoldingRegister    :=ADR(pbyHoldingRegisterA),
        udiRwBitSize          :=SIZEOF(pbyCoilA),
        udiInBitSize          :=SIZEOF(pbyDiscreteInputA),
        udiInWordSize         :=SIZEOF(pbyInputRegisterA),
        udiRwWordSize         :=SIZEOF(pbyInputRegisterA),
        bBusy=> ,
        bActive=> ,
        bConnect=> ,
        bError=> ,
        eError=> ,
        ulRecvCounter=> ,
        ulSendCounter=> );


创建Modbus Rtu从站

功能块FB介绍

参数介绍

输入参数

参数名称 参数类型 描述
bEnable BOOL 启动modbus rtu slave
uSlaveId UINT 从站id信息
comPort COM_PORT 串口号,例如COM_PORT.ttys6
comPortStr STRING comPort参数只支持到/ttys8;如遇到大于8的或者其他串口设备,请使用comPortStr变量,如comPortStr := '/dev/ttys9;
baudrate SERIAL_ 波特率设置,有baudrate_9600、baudrate_115200 两种配置
byteSize SERIAL_DATABIT 串口传输数据位,可配置databit_4、databit_5、databit_6、databit_7、databit_8五种配置
parity SERIAL_PARITY 串口通信校验方式,有parity_no、parity_odd、parity_even 三种
stopBits SERIAL_STOPBIT 串口通信停止位,有stopbit_1、stopbit_1_5、stopbit_5 三种
udiTimeOut UDINT 超时时间
psMbTest INT 默认0,Modbus测试用数据,默认不用配置
pbyCoil POINTER TO BYTE 从站线圈,可读可写
pbyDiscreteInput POINTER TO BYTE 从站离散输入,只读
pbyInputRegister POINTER TO BYTE 从站保持寄存器,可写可读
pbyHoldingRegister POINTER TO BYTE 从站输入寄存器,只读
udiRwBitSize UDINT 以位可读写寻址的最大个数,用于线圈
udiInBitSize UDINT 以位可读寻址的最大个数,用于离散输入
udiInWordSize UDINT 以字可读寻址的最大个数,用于输入寄存器
udiRwWordSize UDINT 以字可读写寻址的最大个数,用于保存寄存器

输出参数

参数名称 参数类型 描述
bBusy BOOL 当功能块被激活时,被置为True,一直保持到收到确认信号
bActive BOOL Modbus从站激活标志位
bConnect BOOL Modbus连接成功标志位
bError BOOL 错误标志位。True为报错,False无报错
eError BOOL 错误反馈id
uIRecvCounter ULINT 数据接收计数器
uISendCounter ULINT 数据发送计数器